package com.smartsystem.modules.system.controller;

import com.smartsystem.common.controller.BaseController;
import com.smartsystem.common.utils.Result;
import com.smartsystem.modules.system.entity.SysPermission;
import com.smartsystem.modules.system.service.SysPermissionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;

/**
 * 权限管理控制器
 */
@Slf4j
@RestController
@RequestMapping("/api/system/permission")
public class SysPermissionController extends BaseController {
    
    @Resource
    private SysPermissionService sysPermissionService;
    
    /**
     * 获取权限列表
     * @return 权限列表
     */
    @GetMapping("/list")
    public Result<List<SysPermission>> list() {
        return Result.success(sysPermissionService.list());
    }
    
    /**
     * 根据ID获取权限信息
     * @param id 权限ID
     * @return 权限信息
     */
    @GetMapping("/{id}")
    public Result<SysPermission> getById(@PathVariable Long id) {
        return Result.success(sysPermissionService.getById(id));
    }
    
    /**
     * 新增权限
     * @param permission 权限信息
     * @return 操作结果
     */
    @PostMapping
    public Result<Boolean> save(@RequestBody SysPermission permission) {
        return Result.success(sysPermissionService.save(permission));
    }
    
    /**
     * 更新权限
     * @param permission 权限信息
     * @return 操作结果
     */
    @PutMapping
    public Result<Boolean> update(@RequestBody SysPermission permission) {
        return Result.success(sysPermissionService.updateById(permission));
    }
    
    /**
     * 删除权限
     * @param id 权限ID
     * @return 操作结果
     */
    @DeleteMapping("/{id}")
    public Result<Boolean> delete(@PathVariable Long id) {
        return Result.success(sysPermissionService.removeById(id));
    }
    
    /**
     * 获取当前用户的菜单树
     * @return 菜单树
     */
    @GetMapping("/menu-tree")
    public Result<List<SysPermission>> getMenuTree() {
        try {
            // 从JWT Token中获取当前登录用户的ID
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
            if (authentication == null || !authentication.isAuthenticated()) {
                return Result.fail("用户未登录");
            }
            
            String username = authentication.getName();
            if (username == null || username.trim().isEmpty()) {
                return Result.fail("无法获取用户信息");
            }
            
            // 通过用户名获取用户ID（这里需要调用用户服务）
            // 临时使用固定ID，实际应该通过用户服务获取
            Long userId = 1L; // TODO: 通过username从数据库获取真实的userId
            
            List<SysPermission> menuTree = sysPermissionService.getUserMenuTree(userId);
            return Result.success(menuTree);
        } catch (Exception e) {
            log.error("获取用户菜单树失败", e);
            return Result.fail("获取菜单树失败");
        }
    }
}